home *** CD-ROM | disk | FTP | other *** search
/ Aminet 52 / Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso / Aminet / misc / emu / Apex-src.lha / DUP.XPL < prev    next >
Text File  |  2001-09-30  |  2KB  |  122 lines

  1. \DUP.XPL    APR-10-87
  2. \Disk duplicator for Apex V1.8.
  3.  
  4. \REVISION HISTORY:
  5. \NOV-21-85, Added single disk dup and repeated duplication, L.B.
  6. \FEB-28-86, Converted to 68000 use.
  7. \DEC-05-86, Fixed the incredible shrinking buffer bug, L.B.
  8. \APR-10-87, Changed string conventions
  9.  
  10. code    RESERVE=3,    CHIN=7,        CHOUT=8,    CRLF=9,
  11.     INTIN=10,    INTOUT=11,    TEXT=12,    OPENI=13,
  12.     FREE=18,    FWRITE=30,    FREAD=31;
  13.  
  14. int    I, FROMUNIT, TOUNIT, SIZE0, MAXBLK;
  15. addr    BUFFER;
  16.  
  17.  
  18.  
  19. func    VERIFY;        \Return 'TRUE' if "Y" (or "y") is typed in
  20. begin
  21. TEXT(0, " - ARE YOU SURE (N/Y)? ");
  22. OPENI(0);
  23. return (CHIN(0)!$20) = ^y;
  24. end;    \VERIFY
  25.  
  26.  
  27.  
  28. proc    NEWDISK(FLAG);    \Prompt user to insert disk
  29. int    FLAG;
  30. begin
  31. if TOUNIT = FROMUNIT then
  32.     begin
  33.     TEXT(0, if FLAG then "INSERT COPY DISK" else "RESTORE ORIGINAL DISK");
  34.     repeat until VERIFY;
  35.     end;
  36. end;    \NEWDISK
  37.  
  38.  
  39.  
  40. proc    SHOWTITLE(UNIT); \Output the title of the specified unit
  41. int    UNIT;
  42. int    I, CH;
  43. addr    BUFFER, TITLE;
  44. begin
  45. BUFFER:= RESERVE(256);
  46. TITLE:= BUFFER +88;
  47. FREAD(UNIT, 12, BUFFER, 1);
  48. for I:= 0, 79 do
  49.     begin
  50.     CH:= TITLE(I);
  51.     if CH>=$20 & CH<$80 then CHOUT(0,CH)
  52.     else I:= 80;
  53.     end;
  54. end;    \SHOWTITLE
  55.  
  56.  
  57.  
  58. proc    DUPDSK;
  59. int    BLK, SIZE;
  60. begin
  61. SIZE:= SIZE0;
  62. BLK:= 0;
  63. loop    begin
  64.     if MAXBLK-BLK < SIZE then SIZE:= MAXBLK -BLK;
  65.     if SIZE = 0 then quit;
  66.  
  67.     FREAD(FROMUNIT, BLK, BUFFER, SIZE);
  68.  
  69.     NEWDISK(true);            \Insert copy disk (if necessary)
  70.     FWRITE(TOUNIT, BLK, BUFFER, SIZE);
  71.     BLK:= BLK + SIZE;
  72.     if BLK = MAXBLK then quit;
  73.     NEWDISK(false);            \Insert original disk (if necessary)
  74.     end;
  75. end;    \DUPDSK
  76.  
  77.  
  78.  
  79. begin    \MAIN
  80. SIZE0:= FREE /256;
  81. SIZE0:= SIZE0 -1;        \Leave a little space to work with (for safety)
  82. BUFFER:= RESERVE(SIZE0 *256);
  83.  
  84. TEXT(0,"-- DISK DUPLICATOR, V1.8x3 --
  85. BUFFER: "); INTOUT(0,SIZE0); CRLF(0);
  86.  
  87. TEXT(0,"FROM, TO UNITS? ");
  88. FROMUNIT:= INTIN(0);
  89. TOUNIT:= INTIN(0);
  90.  
  91. TEXT(0,"HOW MANY BLOCKS? ");
  92. MAXBLK:= INTIN(0);
  93.  
  94. loop    begin
  95.     if TOUNIT # FROMUNIT then
  96.         begin
  97.         repeat    TEXT(0, "ABOUT TO OVERWRITE UNIT ");
  98.             INTOUT(0, TOUNIT); CRLF(0);
  99.             SHOWTITLE(TOUNIT); CRLF(0);
  100.         until VERIFY;
  101.         end
  102.     else    begin
  103.         TEXT(0,"INSERT ORIGINAL DISK");
  104.         repeat until VERIFY;
  105.         end;
  106.  
  107.     DUPDSK;
  108.     TEXT(0,"DUP ANOTHER DISK (N/Y)? ");
  109.     OPENI(0);
  110.     if (CHIN(0)!$20) # ^y then quit;
  111.     CRLF(0);
  112.     end;
  113. end;    \MAIN
  114. 
  115.     DUPDSK;
  116.     TEXT(0,"DUP ANOTHER DISK (N/Y)? ");
  117.     OPENI(0);
  118.     if (CHIN(0)!$20) # ^y then quit;
  119.     CRLF(0);
  120.     end;
  121. end;    \MAIN
  122.